﻿using Sustainalytics.Entities;
using System;
using System.Collections.Generic;

namespace Sustainalytics.ScreeningTool.BL
{
    public interface IFilterCriteriaManager
    {
        #region AddAndUpdateCriteriaType
        FilterCriteria AddAndUpdateCriteriaTypeOne(Guid templateCriteriaId, Guid filterId, bool isReport, int? minValue, int? maxValue);
        FilterCriteria AddAndUpdateCriteriaTypeTwo(Guid templateCriteriaId, Guid filterId, Guid filterGroupId, bool isReport, int? score);
        FilterCriteria AddAndUpdateCriteriaTypeThree(Guid templateCriteriaId, Guid filterId, bool isReport, List<string> selectedItems, Guid filterGroupId);
        FilterCriteria AddAndUpdateCriteriaTypeFour(Guid templateCriteriaId, Guid filterId, bool isReport, string categoryOfInvolvement, Guid filterGroupId,
            string categorySymbol, bool? involvement, bool? significantOwnership, bool? revenueRange, double? piRangeStart, double? piRangeStop);
        FilterCriteria AddAndUpdateCriteriaTypeFive(Guid templateCriteriaId, Guid filterId, Guid filterGroupId, bool isReport, int? score);
        FilterCriteria AddAndUpdateCriteriaTypeSix(Guid templateCriteriaId, Guid filterId, Guid filterGroupId, bool isReport, int? minValue, int? maxValue);
        FilterCriteria AddAndUpdateCriteriaTypeSeven(Guid templateCriteriaId, Guid filterId, Guid filterGroupId, bool isReport, List<string> selectedItems);
        FilterCriteria AddAndUpdateCriteriaTypeEight(Guid templateCriteriaId, Guid filterId, Guid filterGroupId, bool isReport, int? score);
        FilterCriteria AddAndUpdateCriteriaTypeNine(Guid templateCriteriaId, Guid filterId, Guid filterGroupId, bool isReport, int? score);
        FilterCriteria AddAndUpdateCriteriaTypeTen(Guid templateCriteriaId, Guid filterId, Guid filterGroupId, bool isReport);
        FilterCriteria AddAndUpdateCriteriaType16(Guid templateCriteriaId, Guid filterId, Guid filterGroupId, bool isReport, int? minValue, int? maxValue);
        FilterCriteria AddAndUpdateCriteriaType17(Guid templateCriteriaId, Guid filterId, Guid filterGroupId, bool isReport, int? score);
        FilterCriteria AddAndUpdateCriteriaType25(Guid templateCriteriaId, Guid filterId, Guid filterGroupId, bool isReport, int? score);
        #endregion

        FilterCriteria UpdateCriteriaTypeOne(Guid templateCriteriaId, Guid filterId, int minValue, int maxValue);
        FilterCriteria UpdateCriteriaTypeThree(Guid templateCriteriaId, Guid filterId, List<string> selectedItems);

        #region GetSelectedValueInformation
        string GetSelectedValueInformationForChartCriteria(int minValue, int maxValue);
        string GetSelectedValueInformationForCriteriaType2(int? score);
        string GetSelectedValueInformationForCriteriaType3(List<string> SelectedItems);
        string GetSelectedValueInformationForCriteriaType7(List<string> SelectedItems);
        string GetSelectedValueInformationForCriteriaType8(int? score);
        #endregion

        List<FilterCriteria> GetAllFilterCriteriaByFilterId(Guid filterId);
        List<FilterCriteria> GetFilterCriteriaGroupByFilterCriteriaId(Guid filterCriteriaId);

        void DeleteFilterCriteriaById(Guid filterCriteriaId);
        void DeleteFilterCriteriaGroup(Guid filterId, Guid filterCriteriaId, Guid? filterGroupId);
        void DeleteFilterCriteriaByIdTemplateIdAndFilterId(Guid templateCriteriaId, Guid filterId);
        void DeleteFilterCriteriaByFilterGroupId(Guid filterId, Guid filterGroupId);
    }
}
